package tp1.datos;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import tp1.presentacion.modelo.Localidad;
import tp1.presentacion.modelo.Provincia;

public class LocalidadDAO implements DAO{

	@Override
	public void agregar(Object ob) {
		Localidad loc = (Localidad)ob;
		Conexion con = new Conexion();
		String sql = "insert into localidades (nom_localidad,distancia_origen,cod_provincia) values(?,?,?);";
		try {
			PreparedStatement ps = con.getConexion().prepareStatement(sql);
			ps.setString(1, loc.getNombre());
			ps.setInt(2, loc.getDistancia());
			ps.setInt(3, loc.getProvincia().getCodigo());
			ps.executeUpdate();
		} catch(SQLException sqlEx) {
			sqlEx.printStackTrace();
		} finally {
			try {
				con.getConexion().close();
			} catch (SQLException se) {
				se.printStackTrace();
			}
		}
	}

	@Override
	public ArrayList<Localidad> getTodos() {
		ArrayList<Localidad> locs = new ArrayList<Localidad>();
		Conexion con = new Conexion();
		String sql = "select * from localidades;";
		try {
			Statement st = con.getConexion().createStatement();
			ResultSet rs = st.executeQuery(sql);
			while(rs.next()) {
				int cod = rs.getInt("cod_localidad");
				String nom = rs.getString("nom_localidad");
				int dist = rs.getInt("distancia_origen");
				int pr = rs.getInt("cod_provincia");
				ProvinciaDAO provDAO = new ProvinciaDAO();
				Provincia prov = provDAO.getUno(pr);
				//Armo la nueva instancia de localidad
				Localidad locAct = new Localidad();
				locAct.setCodigo(cod);
				locAct.setNombre(nom);
				locAct.setDistancia(dist);
				locAct.setProvincia(prov);
				//Agrego la localidad a la coleccion
				locs.add(locAct);
			}
		} catch(SQLException sqlEx) {
			sqlEx.printStackTrace();
		}
		return locs;
	}

	@Override
	public Localidad getUno(int id) {
		Localidad loc = new Localidad();
		Conexion con = new Conexion();
		String sql = "select * from localidades where cod_localidad = ?;";
		try {
			PreparedStatement pst = con.getConexion().prepareStatement(sql);
			pst.setInt(1, id);
			ResultSet rst = pst.executeQuery();
			if(rst.next()) {
				int cod = rst.getInt("cod_localidad");
				String nom = rst.getString("nom_localidad");
				int dist = rst.getInt("distancia_origen");
				int pr = rst.getInt("cod_provincia");
				ProvinciaDAO provDAO = new ProvinciaDAO();
				Provincia prov = provDAO.getUno(pr);
				
				loc.setCodigo(cod);
				loc.setNombre(nom);
				loc.setDistancia(dist);
				loc.setProvincia(prov);
			}				
		} catch(SQLException sqlEx) {
			sqlEx.printStackTrace();
		}
		return loc;
	}
}
